﻿/*****************************************************************//**
 * @file        FITKMeshNode.h
 * @brief       网格节点类。
 *
 * @author      ChengHaotian (yeguangbaozi@foxmail.com)
 * @date        2025-06-20
 *********************************************************************/

#ifndef __FITKMESHNODE_H__
#define __FITKMESHNODE_H__

#include "FITK_Kernel/FITKCore/FITKVec3D.h"
#include "FITKInterfaceModelAPI.h"
#include "FITKModelEnum.h"

#include <QList>

namespace Interface
{
    /**
     * @brief       网格节点类。
     * @author      ChengHaotian (yeguangbaozi@foxmail.com)
     * @date        2025-06-20
     */
    class FITKInerfaceModelAPI FITKMeshNode : public Core::FITKNode
    {
    public:
        using Core::FITKNode::FITKNode;

        /**
         * @brief       构造函数。
         * @param[in]   id：节点ID
         * @param[in]   x：x坐标
         * @param[in]   y：y坐标
         * @param[in]   z：z坐标
         * @param[in]   isNative：是否与几何关联[缺省]
         * @param[in]   tag：几何点标记[缺省]
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        FITKMeshNode(const int id, const double x, const double y, const double z, bool isNative, unsigned int tag);

        /**
         * @brief       构造函数。
         * @param[in]   id：节点ID
         * @param[in]   coor：坐标
         * @param[in]   isNative：是否与几何关联[缺省]
         * @param[in]   tag：几何点标记[缺省]
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        FITKMeshNode(const int id, const double* coor, bool isNative, unsigned int tag);

        /**
         * @brief       析构函数。
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        virtual ~FITKMeshNode() = default;

        /**
         * @brief       设置几何标记。
         * @param[in]   tag：几何标记
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        void setTag(unsigned int tag);

        /**
         * @brief       获取几何标记。
         * @return      几何标记
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        unsigned int getTag() const;

        /**
         * @brief       设置几何关联性。
         * @param[in]   native：几何关联性
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        void setNativeFlag(bool native);

        /**
         * @brief       获取几何关联性。
         * @return      几何关联性
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        bool getNativeFlag() const;

    protected:
        /**
         * @brief       几何标记
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        unsigned int _tag = 0;

        /**
         * @brief       几何关联性。
         * @author      ChengHaotian (yeguangbaozi@foxmail.com)
         * @date        2025-06-20
         */
        bool _isNative = false;

    };
}

#endif //!__FITKMESHNODE_H__
